GdkDisplay: Add GdkSeat getters
authorCarlos Garnacho <carlosg@gnome.org>
Thu, 26 Nov 2015 18:52:23 +0000 (19:52 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Mon, 14 Dec 2015 23:16:15 +0000 (00:16 +0100)
https://bugzilla.gnome.org/show_bug.cgi?id=759309

docs/reference/gdk/gdk3-sections.txt
gdk/gdkdisplay.c
gdk/gdkdisplay.h
gdk/gdkdisplayprivate.h

index ba66214fbbdaa6c8724578c82aa59a9880ff79c9..b7f1b09f60ddc2931cd242a9514bfd965c1f4100 100644 (file)
@@ -156,6 +156,8 @@ gdk_display_supports_input_shapes
 gdk_display_supports_composite
 gdk_display_get_app_launch_context
 gdk_display_notify_startup_complete
+gdk_display_get_default_seat
+gdk_display_list_seats
 
 <SUBSECTION Standard>
 GDK_DISPLAY
index 29e359fcf6449f62bd2fe91bef8d1591a38a6ee6..37ef5fb45cef572be1618aa072c1c731e3be5843 100644 (file)
@@ -125,6 +125,15 @@ gdk_display_real_event_data_free (GdkDisplay     *display,
 {
 }
 
+static GdkSeat *
+gdk_display_real_get_default_seat (GdkDisplay *display)
+{
+  if (!display->seats)
+    return NULL;
+
+  return display->seats->data;
+}
+
 static void
 gdk_display_class_init (GdkDisplayClass *class)
 {
@@ -140,6 +149,7 @@ gdk_display_class_init (GdkDisplayClass *class)
   class->make_default = gdk_display_real_make_default;
   class->event_data_copy = gdk_display_real_event_data_copy;
   class->event_data_free = gdk_display_real_event_data_free;
+  class->get_default_seat = gdk_display_real_get_default_seat;
 
   /**
    * GdkDisplay::opened:
@@ -2318,3 +2328,73 @@ gdk_display_get_debug_updates (GdkDisplay *display)
   else
     return _gdk_debug_updates;
 }
+
+void
+gdk_display_add_seat (GdkDisplay *display,
+                      GdkSeat    *seat)
+{
+  g_return_if_fail (GDK_IS_DISPLAY (display));
+  g_return_if_fail (GDK_IS_SEAT (seat));
+
+  display->seats = g_list_prepend (display->seats, g_object_ref (seat));
+}
+
+void
+gdk_display_remove_seat (GdkDisplay *display,
+                         GdkSeat    *seat)
+{
+  GList *link;
+
+  g_return_if_fail (GDK_IS_DISPLAY (display));
+  g_return_if_fail (GDK_IS_SEAT (seat));
+
+  link = g_list_find (display->seats, seat);
+
+  if (link)
+    {
+      display->seats = g_list_remove_link (display->seats, link);
+      g_object_unref (link->data);
+      g_list_free (link);
+    }
+}
+
+/**
+ * gdk_display_get_default_seat:
+ * @display: a #GdkDisplay
+ *
+ * Returns the default #GdkSeat for this display.
+ *
+ * Returns: (transfer none): the default seat.
+ *
+ * Since: 3.20
+ **/
+GdkSeat *
+gdk_display_get_default_seat (GdkDisplay *display)
+{
+  GdkDisplayClass *display_class;
+
+  g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
+
+  display_class = GDK_DISPLAY_GET_CLASS (display);
+
+  return display_class->get_default_seat (display);
+}
+
+/**
+ * gdk_display_list_seats:
+ * @display: a #GdkDisplay
+ *
+ * Returns the list of seats known to @display.
+ *
+ * Returns: (transfer container) (element-type GdkSeat): the
+ *          list of seats known to the #GdkDisplay
+ *
+ * Since: 3.20
+ **/
+GList *
+gdk_display_list_seats (GdkDisplay *display)
+{
+  g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
+
+  return g_list_copy (display->seats);
+}
index a76af35bed0f634114a459a043e104f9802ac4e2..9e30d877d8260e456b14db9a8489de0c87648ec9 100644 (file)
@@ -30,6 +30,7 @@
 #include <gdk/gdktypes.h>
 #include <gdk/gdkevents.h>
 #include <gdk/gdkdevicemanager.h>
+#include <gdk/gdkseat.h>
 
 G_BEGIN_DECLS
 
@@ -171,6 +172,12 @@ GdkDeviceManager * gdk_display_get_device_manager (GdkDisplay *display);
 GDK_AVAILABLE_IN_ALL
 GdkAppLaunchContext *gdk_display_get_app_launch_context (GdkDisplay *display);
 
+GDK_AVAILABLE_IN_3_20
+GdkSeat * gdk_display_get_default_seat (GdkDisplay *display);
+
+GDK_AVAILABLE_IN_3_20
+GList   * gdk_display_list_seats       (GdkDisplay *display);
+
 G_END_DECLS
 
 #endif  /* __GDK_DISPLAY_H__ */
index 14d8ea6583c3f8b754e949e4fe2aa2ad8ec98ff8..702d6cffe986b2bbd4060370a4346be4f49138c0 100644 (file)
@@ -125,6 +125,8 @@ struct _GdkDisplay
   guint debug_updates_set : 1;
 
   GdkRenderingMode rendering_mode;
+
+  GList *seats;
 };
 
 struct _GdkDisplayClass
@@ -237,6 +239,8 @@ struct _GdkDisplayClass
   gboolean               (*make_gl_context_current)    (GdkDisplay        *display,
                                                         GdkGLContext      *context);
 
+  GdkSeat *              (*get_default_seat)           (GdkDisplay     *display);
+
   /* Signals */
   void                   (*opened)                     (GdkDisplay     *display);
   void (*closed) (GdkDisplay *display,
@@ -318,6 +322,11 @@ GdkWindow *         _gdk_display_create_window        (GdkDisplay       *display
 gboolean            gdk_display_make_gl_context_current  (GdkDisplay        *display,
                                                           GdkGLContext      *context);
 
+void                gdk_display_add_seat              (GdkDisplay       *display,
+                                                       GdkSeat          *seat);
+void                gdk_display_remove_seat           (GdkDisplay       *display,
+                                                       GdkSeat          *seat);
+
 G_END_DECLS
 
 #endif  /* __GDK_DISPLAY_PRIVATE_H__ */